package stardust.product.platform.webc.support;


import java.util.HashMap;
import java.util.Map;
import stardust.product.platform.webc.WebcContext;
import stardust.product.platform.webc.WebcException;


public class WebcContextUtils
{

  private WebcContextUtils()
  {
    ;
  }

  /**
   * 上下文默认名称。
   */
  public static final String DEFAULT_CONTEXT = "DEFAULT";

  private static final Map<String, WebcContext> CONTEXT = new HashMap<String, WebcContext>();

  /**
   * 返回应用默认上下文。
   * <p/>
   * @return 返回应用默认上下文，如果不存在将返回<tt>null</tt>值。
   */
  public static WebcContext getDefaultContext()
  {
    return WebcContextUtils.getContext(WebcContextUtils.DEFAULT_CONTEXT);
  }

  /**
   * 返回应用内指定名称的上下文。
   * <p/>
   * @param contextName WebcContext的注册名称，是一个<tt>String</tt>类型。
   * <p/>
   * @return 返回指定名称的上下文，如果不存在将返回<tt>null</tt>值。
   */
  public static WebcContext getContext(String contextName)
  {
    return WebcContextUtils.CONTEXT.get(contextName);
  }

  /**
   * 注册应用内指定名称的上下文实例。
   * <p/>
   * @param contextName 注册的WebcContext名称，是一个<tt>String</tt>类型。
   * @param context     注册的WebcContext对象实例，是一个<tt>WebcContext</tt>类型。
   */
  public static void setContext(String contextName, WebcContext context)
  {
    contextName = contextName == null ? DEFAULT_CONTEXT : contextName;

    // 在应用程序上下文中注册容器。
    if (WebcContextUtils.CONTEXT.containsKey(contextName))
    {
      throw new WebcException("名称为[" + contextName + "]的WebcContext已经存在，无法重复注册。");
    }
    else
    {
      WebcContextUtils.CONTEXT.put(contextName, context);
    }
  }

}
